package com.lkd.job;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.lkd.common.VMSystem;
import com.lkd.entity.UserEntity;
import com.lkd.service.UserService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;


@Component
@Slf4j
public class UserJob {

    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private UserService userService;

    /**
     *  @XxlJob("workCountInitJobHandler") 括号中要与xxl-job控制台的任务 JobHandler 一致
     * @param param
     * @return
     */
    @XxlJob("workCountInitJobHandler")
    public ReturnT<String> workCountInitJobHandler(String param){
        log.info("收到xxl-job 参数:{}",param);

        // new Date()当前时间, DateField.DAY_OF_MONTH时间单位-->天, Integer.parseInt(param)-->时间偏移量(这里的偏移量由xxl-job传过来 0代表当天 1代表第二天)
        // time能到的是一个时间毫秒值
        long time = DateUtil.offset( new Date(), DateField.DAY_OF_MONTH, Integer.parseInt(param) ).getTime();
        String format = new SimpleDateFormat("yyyyMMdd").format(new Date(time));

        /**
         * 获取在职的运营运维人员
         */
        LambdaQueryWrapper<UserEntity> wrapper = Wrappers.<UserEntity>lambdaQuery()
                .in(UserEntity::getRoleCode, "1002", "1003")
                .eq(UserEntity::getStatus, 1);
        List<UserEntity> userList = userService.list(wrapper);

        userList.stream().forEach(userEntity -> {

            String key = VMSystem.REGION_TASK_KEY_PREF
                    + format + "."
                    + userEntity.getRegionId()
                    + "." + userEntity.getRoleCode();
            /**
             * 把所有的运营/运维人员信息存到redis
             * 大key是 固定字符串前缀 + 日期  + 区域id + 人员编号
             * 小key是 用户id
             * 值是 初始的用户工单数量
             */
            redisTemplate.opsForZSet().add(key,userEntity.getId(),0 );
            redisTemplate.expire(key,2, TimeUnit.DAYS); //过期时间
        });

        return ReturnT.SUCCESS;
    }
}
